package com.hds.modules.app.entity.wx.handler;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.hds.modules.app.entity.wx.po.CloseOrder;
import com.hds.modules.app.entity.wx.po.CloseOrderResult;
import com.hds.modules.app.entity.wx.utils.WxPayUtils;
import com.jfinal.kit.HttpKit;

/**
 * 微信支付关单接口处理类
 * @author guonan
 * @version 1.0
 */
public class CloseOrderApi {
	/** 
	 * 【微信支付关闭订单接口】
	 * <b>以下两种情况需要进行关单处理
	 *（1：商户订单支付失败需要生成新单号重新发起支付，要对原订单号调用关单，避免重复支付；
	 *  2：系统下单后，用户支付超时，系统退出不再受理，避免用户继续，请调用关单接口）
	 *  @param
	 *  [<ul>
		 *   <li>公众账号ID:appid,</li>
		 *   <li>商户号:mch_id,</li>
		 *   <li>商户订单号:out_trade_no,【商户系统内部的订单号】</li>
		 *   <li>随机字符串:nonce_str,【32个字符内、可包含字母】</li>
		 *   <li>签名:sign,</li>
		 *   <li>签名类型:sign_type【默认为MD5】</li>
		 *   </ul>
	 *   ]
	 *   </b>
	 *   e.g:
	 *      <xml>
			   <appid>wx2421b1c4370ec43b</appid>
			   <mch_id>10000100</mch_id>
			   <nonce_str>4ca93f17ddf3443ceabf72f26d64fe0e</nonce_str>
			   <out_trade_no>1415983244</out_trade_no>
			   <sign>59FF1DF214B2D279A0EA7077C54DD95D</sign>
			</xml>
	 *  
	 **/
	public static final String CLOSE_ORDER = "https://api.mch.weixin.qq.com/pay/closeorder";
	
	/**
     * 关闭订单请求数据签名
     * @param closeOrder
     * @return
     */
    private static String getUnifiedOrderRquestSign(CloseOrder closeOrder,String apiKey){
        
    	String[] paramNames = new String[]{
                "appid","mch_id","out_trade_no","nonce_str"
        };
        
        Map<String,String> paramValueMap = new HashMap<String,String>();
        paramValueMap.put("appid", closeOrder.getAppid());
        paramValueMap.put("mch_id", closeOrder.getMch_id());
        paramValueMap.put("out_trade_no", closeOrder.getOut_trade_no());
        paramValueMap.put("nonce_str", closeOrder.getNonce_str());
        
        String sign = WxPayUtils.getPaySignMD5(paramNames,paramValueMap);
        return sign;
    }

    
    /**
     * 关闭订单处理
     * @param closeOrder
     * @return
     * @throws Exception 
     */
    public static CloseOrderResult closeOrderK(CloseOrder closeOrder, HttpServletRequest request) throws Exception{
    	
    	//创建请求报文，发送请求
        String requestXML = closeOrder.creatRequestXML(closeOrder);
        
        String resultXML = HttpKit.post(CLOSE_ORDER, requestXML);
    	return null;
    }
    
    
    
}